home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_008 / src / hack.worn.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  1KB  |  68 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
  2.  
  3. #include "hack.h"
  4.  
  5. struct worn {
  6.     long w_mask;
  7.     struct obj **w_obj;
  8. } worn[] = {
  9.     { W_ARM, &uarm },
  10.     { W_ARM2, &uarm2 },
  11.     { W_ARMH, &uarmh },
  12.     { W_ARMS, &uarms },
  13.     { W_ARMG, &uarmg },
  14.     { W_RINGL, &uleft },
  15.     { W_RINGR, &uright },
  16.     { W_WEP, &uwep },
  17.     { W_BALL, &uball },
  18.     { W_CHAIN, &uchain },
  19.     { 0, 0 }
  20. };
  21.  
  22. setworn(obj, mask)
  23. register struct obj *obj;
  24. long mask;
  25. {
  26.     register struct worn *wp;
  27.     register struct obj *oobj;
  28.  
  29.     for(wp = worn; wp->w_mask; wp++) if(wp->w_mask & mask) {
  30.         oobj = *(wp->w_obj);
  31.         if(oobj && !(oobj->owornmask & wp->w_mask)){
  32.             pline("Setworn: mask = %d.", wp->w_mask);
  33.             impossible();
  34.         }
  35.         if(oobj) oobj->owornmask &= ~wp->w_mask;
  36.         if(obj && oobj && wp->w_mask == W_ARM){
  37.             if(uarm2) {
  38.                 pline("Setworn: uarm2 set?");
  39.                 impossible();
  40.             } else
  41.                 setworn(uarm, W_ARM2);
  42.         }
  43.         *(wp->w_obj) = obj;
  44.         if(obj) obj->owornmask |= wp->w_mask;
  45.     }
  46.     if(uarm2 && !uarm) {
  47.         uarm = uarm2;
  48.         uarm2 = 0;
  49.         uarm->owornmask ^= (W_ARM | W_ARM2);
  50.     }
  51. }
  52.  
  53. /* called e.g. when obj is destroyed */
  54. setnotworn(obj) register struct obj *obj; {
  55.     register struct worn *wp;
  56.  
  57.     for(wp = worn; wp->w_mask; wp++)
  58.         if(obj == *(wp->w_obj)) {
  59.             *(wp->w_obj) = 0;
  60.             obj->owornmask &= ~wp->w_mask;
  61.         }
  62.     if(uarm2 && !uarm) {
  63.         uarm = uarm2;
  64.         uarm2 = 0;
  65.         uarm->owornmask ^= (W_ARM | W_ARM2);
  66.     }
  67. }
  68.